let mix = require('laravel-mix');
let del = require('del');
let fs = require('fs');
function scanAssetsDevApps(assetBasePath, apps, srcBasePath) {
    apps.forEach(name => {
        let configDir = assetBasePath + '/' + name;
        srcBasePath = !!srcBasePath ? srcBasePath : configDir;
        let file = configDir + '/assets.config.js';
        if (fs.existsSync(file)) {
            let config = require(file);
            let assets = config.assets;

            if (assets.less) {
                assets.less.forEach(less => {
                    let lessFile = srcBasePath + '/' + assets.src + '/' + less.src;
                    let lessDist = srcBasePath + '/' + assets.dist + '/' + less.dist;
                    if (fs.existsSync(lessFile)) {
                        console.log('load addon less file: ' + lessFile)
                        mix.less(lessFile, lessDist);
                    }
                });
            }
            if (assets.js) {
                assets.js.forEach(js => {
                    let jsFile = srcBasePath + '/' + assets.src + '/' + js.src;
                    let jsDist = srcBasePath + '/' + assets.dist + '/' + js.dist;
                    if (fs.existsSync(jsFile)) {
                        console.log('load addon js file: ' + jsFile)
                        mix.js(jsFile, jsDist);
                    }
                });
            }
            if (assets.imageDir) {
                let srcDir = srcBasePath + '/' + assets.src + '/' + assets.imageDir;
                let distDir = srcBasePath + '/' + assets.dist + '/' + assets.imageDir;
                if (fs.existsSync(srcDir)) {
                    console.log('copy image dir: ' + srcDir)
                    mix.copyDirectory(srcDir, distDir);
                }
            }
        }
    });
}
mix
    .options({
        processCssUrls: false
    });
if (fs.existsSync("./dev.js")) {
    let config = require("./dev.js");
    console.log(config);
    if (config.apps.admin.length > 0) {
        scanAssetsDevApps(".", config.apps.admin, ".");
    }
    if (config.apps.addons.length > 0) {
        scanAssetsDevApps("./Addons", config.apps.addons);
    }
    if (config.apps.themes.length > 0) {
        scanAssetsDevApps("./Themes", config.apps.themes);
    }
}
/*
 * |-------------------------------------------------------------------------- |
 * Mix Asset Management
 * |-------------------------------------------------------------------------- | |
 * Mix provides a clean, fluent API for defining some Webpack build steps | for
 * your Laravel application. By default, we are compiling the Sass | file for
 * your application, as well as bundling up your JS files. |
 */
mix
    .then(function () {
        del(['Public/assets/*']);
    });
// mix.js('src/app.js', 'dist/').sass('src/app.scss', 'dist/');

// Full API
// mix.js(src, output);
// mix.react(src, output); <-- Identical to mix.js(), but registers React Babel
// compilation.
// mix.preact(src, output); <-- Identical to mix.js(), but registers Preact
// compilation.
// mix.coffee(src, output); <-- Identical to mix.js(), but registers
// CoffeeScript compilation.
// mix.ts(src, output); <-- TypeScript support. Requires tsconfig.json to exist
// in the same folder as webpack.mix.js
// mix.extract(vendorLibs);
// mix.sass(src, output);
// mix.less(src, output);
// mix.stylus(src, output);
// mix.postCss(src, output, [require('postcss-some-plugin')()]);
// mix.browserSync('my-site.test');
// mix.combine(files, destination);
// mix.babel(files, destination); <-- Identical to mix.combine(), but also
// includes Babel compilation.
// mix.copy(from, to);
// mix.copyDirectory(fromDir, toDir);
// mix.minify(file);
// mix.sourceMaps(); // Enable sourcemaps
// mix.version(); // Enable versioning.
// mix.disableNotifications();
// mix.setPublicPath('path/to/Public');
// mix.setResourceRoot('prefix/for/resource/locators');
// mix.autoload({}); <-- Will be passed to Webpack's ProvidePlugin.
// mix.webpackConfig({}); <-- Override webpack.config.js, without editing the
// file directly.
// mix.babelConfig({}); <-- Merge extra Babel configuration (plugins, etc.) with
// Mix's default.
// mix.then(function () {}) <-- Will be triggered each time Webpack finishes
// building.
// mix.override(function (webpackConfig) {}) <-- Will be triggered once the
// webpack config object has been fully generated by Mix.
// mix.dump(); <-- Dump the generated webpack config object to the console.
// mix.extend(name, handler) <-- Extend Mix's API with your own components.
// mix.options({
// extractVueStyles: false, // Extract .vue component styling to file, rather
// than inline.
// globalVueStyles: file, // Variables file to be imported in every component.
// processCssUrls: true, // Process/optimize relative stylesheet url()'s. Set to
// false, if you don't want them touched.
// purifyCss: false, // Remove unused CSS selectors.
// terser: {}, // Terser-specific options.
// https://github.com/webpack-contrib/terser-webpack-plugin#options
// postCss: [] // Post-CSS options:
// https://github.com/postcss/postcss/blob/master/docs/plugins.md
// });